﻿// ***********************************************************************
// Assembly         : AccesoDatos
// Author           : Diego
// Created          : 03-02-2014
//
// Last Modified By : Diego
// Last Modified On : 03-02-2014
// ***********************************************************************
// <copyright file="AD_Material.cs" company="">
//     Copyright (c) . All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using Modelado.Modulos.ClasesModelado;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/// <summary>
/// The ClasesAccesoDatos namespace.
/// </summary>
namespace AccesoDatos.Modulos.ClasesAccesoDatos
{
    /// <summary>
    /// Class AD_Material.
    /// </summary>
    public class AD_Material
    {

        /*
            
               *  Título: CRE_Material
               *  Tipo: Método
               *  Variables: 
             
                MAT_descripcion
                MAT_dimalto
                MAT_dimancho
                MAT_dimgrosor
                MAT_dimlargo
                MAT_codmedida
                MAT_preciomat
                MAT_precioivimat
                MAT_pesokg
                MAT_pesolb
                MAT_metrosmat
             
               *Resumen:  Método recibe informacion de Material, hace llamado y ejecucion de Procedimiento Almacenado "SP_CRE_Material" en la  Base de Datos, 
                          se inserta material en la Base de Datos.
               *Retorno: N/A
               *Autor: Sofia Rodriguez
               *Fecha: 13/07/13
                    
           
                 */

        /// <summary>
        /// Crs the e_ material.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <param name="obj">The object.</param>
        /// <returns>System.Int32.</returns>
        public int CRE_Material(SqlCommand comando, MOD_Material obj)
        {
            try
            {
                string sp = "SP_CRE_Material";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                
                comando.Parameters.Add(new SqlParameter("@mat_descripcion", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("@mat_dimalto", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimancho", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimgrosor", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimlargo", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_codmedida", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@mat_preciomat", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_precioivimat", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_pesokg", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_pesolb", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_metrosmat", SqlDbType.Decimal));
               

                comando.Parameters[0].Value = obj.MAT_descripcion;
                comando.Parameters[1].Value = obj.MAT_dimalto;
                comando.Parameters[2].Value = obj.MAT_dimancho;
                comando.Parameters[3].Value = obj.MAT_dimgrosor;
                comando.Parameters[4].Value = obj.MAT_dimlargo;
                comando.Parameters[5].Value = obj.MAT_codmedida;
                comando.Parameters[6].Value = obj.MAT_preciomat;
                comando.Parameters[7].Value = obj.MAT_precioivimat;
                comando.Parameters[8].Value = obj.MAT_pesokg;
                comando.Parameters[9].Value = obj.MAT_pesolb;
                comando.Parameters[10].Value = obj.MAT_metrosmat;

                var returnParameter = comando.Parameters.Add("@return_value ", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                comando.ExecuteNonQuery();



                int codigo =Convert.ToInt32( returnParameter.Value) ;
                return codigo;

              

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }


        /*
            
        *  Título: DEL_Material
        *  Tipo: Método
        *  Variables: 
             
         mat_codmaterial
             
        *Resumen:  Método recibe código del material, hace llamado y ejecucion de Procedimiento Almacenado "SP_DEL_Material" en la  Base de Datos, 
                   se elimina material que el usuario haya seleccionado en la interfaz gráfica.
        *Retorno: N/A
        *Autor: Sofia Rodriguez
        *Fecha: 13/07/13
                    
           
          */
        /// <summary>
        /// Des the l_ material.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <param name="codigo">The codigo.</param>
        public void DEL_Material(SqlCommand comando, int codigo)
        {
            try
            {
                string sp = "SP_DEL_Material";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();


                comando.Parameters.Add(new SqlParameter("@mat_codmaterial", SqlDbType.Int));

                comando.Parameters[0].Value = codigo;

                comando.ExecuteNonQuery();


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }


        /*
            
           *  Título: UPD_Cliente
           *  Tipo: Método
           *  Variables:
            MAT_codmaterial
            MAT_descripcion
            MAT_dimalto
            MAT_dimancho
            MAT_dimgrosor
            MAT_dimlargo
            MAT_codmedida
            MAT_preciomat
            MAT_precioivimat
            MAT_pesokg
            MAT_pesolb
            MAT_metrosmat
             
           *Resumen:  Método recibe código del material, hace llamado y ejecucion de Procedimiento Almacenado "SP_UPD_Material" en la  Base de Datos, 
            se actualiza  material que el usuario haya seleccionado en la interfaz gráfica.
           *Retorno: N/A
           *Autor: Sofia Rodriguez
           *Fecha: 13/07/13
           
         
           
             */

        /// <summary>
        /// Ups the d_ material.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <param name="obj">The object.</param>
        public void UPD_Material(SqlCommand comando, MOD_Material obj)
        {
            try
            {
                string sp = "SP_UPD_Material";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@mat_codmaterial", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@mat_descripcion", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("@mat_dimalto", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimancho", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimgrosor", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_dimlargo", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_codmedida", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@mat_preciomat", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_precioivimat", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_pesokg", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_pesolb", SqlDbType.Decimal));
                comando.Parameters.Add(new SqlParameter("@mat_metrosmat", SqlDbType.Decimal));

                comando.Parameters[0].Value = obj.MAT_codmaterial;
                comando.Parameters[1].Value = obj.MAT_descripcion;
                comando.Parameters[2].Value = obj.MAT_dimalto;
                comando.Parameters[3].Value = obj.MAT_dimancho;
                comando.Parameters[4].Value = obj.MAT_dimgrosor;
                comando.Parameters[5].Value = obj.MAT_dimlargo;
                comando.Parameters[6].Value = obj.MAT_codmedida;
                comando.Parameters[7].Value = obj.MAT_preciomat;
                comando.Parameters[8].Value = obj.MAT_precioivimat;
                comando.Parameters[9].Value = obj.MAT_pesokg;
                comando.Parameters[10].Value = obj.MAT_pesolb;
                comando.Parameters[11].Value = obj.MAT_metrosmat;

                comando.ExecuteNonQuery();


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        /*Título: SEL_Grid_Materiales
           Tipo: funcion
           Variables: 
             
           CLI_codcliente
           CLI_nombre
           CLI_telefono
           CLI_nombretipocliente
           CLI_estadonombre
             
           Resumen:Método recibe propiedades del Material, hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_Grid_Materiales" en la  Base de Datos, 
           se muestran clientes que existan en  la Base de Datos.
           Retorno: lista en un dataset con datos de clientes
           Autor: Sofia Rodriguez 
           Fecha: 13/07/13*/

        /// <summary>
        /// Ses the l_ grid_ materiales.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <returns>List{MOD_Material}.</returns>
        public List<MOD_Material> SEL_Grid_Materiales(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_Grid_Materiales";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Material> lista = new List<MOD_Material>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Material obj = new MOD_Material();
                    obj.MAT_codmaterial = Convert.ToInt32(dt.Rows[i]["MAT_CODMATERIAL"]);
                    obj.MAT_descripcion = dt.Rows[i]["MAT_DESCRIPCION"].ToString();
                    obj.MAT_preciomat = Convert.ToDecimal(dt.Rows[i]["MAT_PRECIOMAT"]);
                    obj.MAT_precioivimat = Convert.ToDecimal(dt.Rows[i]["MAT_PRECIOIVIMAT"]);


                    lista.Add(obj);
                }


                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        //5trae info de Material para editar
        /// <summary>
        /// Ses the l_ material by identifier.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <param name="CODMaterial">The cod material.</param>
        /// <returns>MOD_Material.</returns>
        public MOD_Material SEL_MaterialByID(SqlCommand comando, int CODMaterial)
        {
            try
            {
                string sp = "SP_SEL_MaterialByID";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@mat_codmaterial", SqlDbType.Int));


                comando.Parameters[0].Value = CODMaterial;


                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                MOD_Material obj = new MOD_Material();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    obj.MAT_codmaterial = Convert.ToInt32(dt.Rows[i]["MAT_CODMATERIAL"]);
                    obj.MAT_descripcion = dt.Rows[i]["MAT_DESCRIPCION"].ToString();
                    obj.MAT_dimalto = Convert.ToDecimal(dt.Rows[i]["MAT_DIMALTO"]);
                    obj.MAT_dimancho = Convert.ToDecimal(dt.Rows[i]["MAT_DIMANCHO"]);
                    obj.MAT_dimgrosor = Convert.ToDecimal(dt.Rows[i]["MAT_DIMGROSOR"]);
                    obj.MAT_dimlargo = Convert.ToDecimal(dt.Rows[i]["MAT_DIMLARGO"]);
                    obj.MAT_codmedida = Convert.ToInt32(dt.Rows[i]["MAT_CODMEDIDA"]);
                    obj.MAT_preciomat = Convert.ToDecimal(dt.Rows[i]["MAT_PRECIOMAT"]);
                    obj.MAT_precioivimat = Convert.ToDecimal(dt.Rows[i]["MAT_PRECIOIVIMAT"]);
                    obj.MAT_pesokg = Convert.ToDecimal(dt.Rows[i]["MAT_PESOKG"]);
                    obj.MAT_pesolb = Convert.ToDecimal(dt.Rows[i]["MAT_PESOLB"]);
                    obj.MAT_metrosmat = Convert.ToDecimal(dt.Rows[i]["MAT_METROSMAT"]);
                }

                return obj;


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        //6selecciona cod medida
        /// <summary>
        /// Ses the l_ co d_ medida.
        /// </summary>
        /// <param name="comando">The comando.</param>
        /// <returns>List{MOD_Unidad_Medida}.</returns>
        public List<MOD_Unidad_Medida> SEL_COD_MEDIDA(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_COD_MEDIDA";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Unidad_Medida> lista = new List<MOD_Unidad_Medida>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Unidad_Medida obj = new MOD_Unidad_Medida();
                    obj.UNI_codmedida = Convert.ToInt32(dt.Rows[i]["UNI_CODMEDIDA"]);
                    obj.UNI_nombre = dt.Rows[i]["UNI_NOMBRE"].ToString();


                    lista.Add(obj);
                }

                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

    }
}

